package JavaCollection;



import org.junit.jupiter.api.Test;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

/**
 * @author Lenl
 * @version v1.0
 * @create 2021-06-05 10:23
 * @description
 *
 * TreeSet：可以按照添加对象的指定属性，进行排序
 *
 */
public class TreeSetTest {
    /**
     * 1.向TreeSet中添加的数据，要求是相同类的对象.默认从小到大顺序遍历
     * 2.两种排序方式：自然排序(实现Comparable接口)，定制排序（Comparator）
     * 3.自然排序中，比较两个对象是否相同的标准为：compareTo()返回0，不再是equals
     * 4.定制排序中，比较两个对象是否相同的标准为：compare()返回0，不再是equals
     *
     */
    @Test
    public void test1(){
        TreeSet set=new TreeSet();
        //不能添加不同类的对象
        set.add(123);
        //set.add("123");
        set.add(321);
        set.add(-123);

        Iterator iterator=set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
        TreeSet set2=new TreeSet();
        //添加的对象必须指定排序方法
        set2.add(new User("zs",21));
        //compareTo()判断相同与否，因此此处添加不进去，除非指定二级排序
        set2.add(new User("zs",23));
        set2.add(new User("ls",26));
        set2.add(new User("ww",21));

        Iterator iterator1=set2.iterator();
        while (iterator1.hasNext()){
            System.out.println(iterator1.next());
        }
    }

    @Test
    public void test2(){
        Comparator com=new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof User && o2 instanceof User ){
                    User u1=(User)o1;
                    User u2=(User)o2;
                    return Integer.compare(u1.getAge(),u2.getAge());
                }else{
                    throw new RuntimeException("比较类型不一致");
                }
            }
        };

        TreeSet set2=new TreeSet(com);//加了参数后会按参数来
        //添加的对象必须指定排序方法
        set2.add(new User("zs",21));
        //compareTo()判断相同与否，因此此处添加不进去，除非指定二级排序
        set2.add(new User("zs",23));
        set2.add(new User("ls",26));
        set2.add(new User("ww",21));

        Iterator iterator1=set2.iterator();
        while (iterator1.hasNext()){
            System.out.println(iterator1.next());
        }
    }

}
